package org.ccay.core.util;

import java.util.Collection;

import org.ccay.core.util.exception.BadArgException;

/**
 * 断言工具，用于解决程序编码中大量的为空或者非空判断的问题，断言失败时，会自动抛出系统异常。
 * 
 * @since 2011-10-17
 */
public final class AssertUtil {	
	private AssertUtil(){
	}
	
	/**
	 * 断言object不能为空	
	 * @param object 对象
	 * @param argName 对应的对象名
	 */
	public static void assertObjectNotNull(Object object,String argName){
		if( object == null ) {
			throw new BadArgException(argName);
		}
	}
	
	/**
	 * 断言字符串不能为null，并且不能为empty
	 * @param str 字符串
	 * @param argName 字符串对应的对象名
	 */
	public static void assertStringNotEmpty(String str,String argName){
		if( str == null || str.length() ==0 ) {
			throw new BadArgException(argName);
		}
	}
	
	/**
	 * 断言数组不能为null，并不能为empty	
	 * @param array 数组
	 * @param argName 对应的对象名
	 */	
	public static void assertArrayNotEmpty(Object[] array,String argName){
		if( array == null || array.length ==0 ) {
			throw new BadArgException(argName);
		}
	}
	
	/**
	 * 断言Set/List等集合不能为null，并不能为empty	
	 * @param collcection 集合（可以为List/Set等） 
	 * @param argName 对应的对象名
	 */	
	public static void assertCollectionNotEmpty(Collection<Object> collcection,String argName){
		if( collcection == null || collcection.isEmpty() ) {
			throw new BadArgException(argName);
		}
	}
	
	/**
	 * 断言整型的范围（有效范围为minValue到maxValue的闭区间）
	 * @param number
	 * @param minValue
	 * @param maxValue
	 * @param argName
	 */
	public static void assertInRange(int number,int minValue,int maxValue,String argName){
		if(number < minValue || number > maxValue){
			throw new BadArgException(argName);
		}
	}
	
}
